export interface UserInfo {
    id: number
    password: string
    realName: string
    roles: string[]
    username: string
    homePath?: string
}

export const MOCK_USERS: UserInfo[] = [
    {
        id: 0,
        password: '123456',
        realName: 'Vben',
        roles: ['super'],
        username: 'vben'
    },
    {
        id: 1,
        password: '123456',
        realName: 'Admin',
        roles: ['admin'],
        username: 'admin',
        homePath: '/workspace'
    },
    {
        id: 2,
        password: '123456',
        realName: 'Jack',
        roles: ['user'],
        username: 'jack',
        homePath: '/analytics'
    }
]

export const MOCK_CODES = [
    // super
    {
        codes: ['AC_100100', 'AC_100110', 'AC_100120', 'AC_100010'],
        username: 'vben'
    },
    {
        // admin
        codes: ['AC_100010', 'AC_100020', 'AC_100030'],
        username: 'admin'
    },
    {
        // user
        codes: ['AC_1000001', 'AC_1000002'],
        username: 'jack'
    }
]

const dashboardMenus = [
    {
        meta: {
            order: -1,
            title: 'page.dashboard.title'
        },
        name: 'Dashboard',
        path: '/dashboard',
        redirect: '/analytics',
        children: [
            {
                name: 'Analytics',
                path: '/analytics',
                component: '/dashboard/analytics/index',
                meta: {
                    affixTab: true,
                    title: 'page.dashboard.analytics'
                }
            },
            {
                name: 'Workspace',
                path: '/workspace',
                component: '/dashboard/workspace/index',
                meta: {
                    title: 'page.dashboard.workspace'
                }
            }
        ]
    }
]

const createDemosMenus = (role: 'admin' | 'super' | 'user') => {
    const roleWithMenus = {
        admin: {
            component: '/demos/access/admin-visible',
            meta: {
                icon: 'mdi:button-cursor',
                title: 'demos.access.adminVisible'
            },
            name: 'AccessAdminVisibleDemo',
            path: '/demos/access/admin-visible'
        },
        super: {
            component: '/demos/access/super-visible',
            meta: {
                icon: 'mdi:button-cursor',
                title: 'demos.access.superVisible'
            },
            name: 'AccessSuperVisibleDemo',
            path: '/demos/access/super-visible'
        },
        user: {
            component: '/demos/access/user-visible',
            meta: {
                icon: 'mdi:button-cursor',
                title: 'demos.access.userVisible'
            },
            name: 'AccessUserVisibleDemo',
            path: '/demos/access/user-visible'
        }
    }

    return [
        {
            meta: {
                icon: 'ic:baseline-view-in-ar',
                keepAlive: true,
                order: 1000,
                title: 'demos.title'
            },
            name: 'Demos',
            path: '/demos',
            redirect: '/demos/access',
            children: [
                {
                    name: 'AccessDemos',
                    path: '/demosaccess',
                    meta: {
                        icon: 'mdi:cloud-key-outline',
                        title: 'demos.access.backendPermissions'
                    },
                    redirect: '/demos/access/page-control',
                    children: [
                        {
                            name: 'AccessPageControlDemo',
                            path: '/demos/access/page-control',
                            component: '/demos/access/index',
                            meta: {
                                icon: 'mdi:page-previous-outline',
                                title: 'demos.access.pageAccess'
                            }
                        },
                        {
                            name: 'AccessButtonControlDemo',
                            path: '/demos/access/button-control',
                            component: '/demos/access/button-control',
                            meta: {
                                icon: 'mdi:button-cursor',
                                title: 'demos.access.buttonControl'
                            }
                        },
                        {
                            name: 'AccessMenuVisible403Demo',
                            path: '/demos/access/menu-visible-403',
                            component: '/demos/access/menu-visible-403',
                            meta: {
                                authority: ['no-body'],
                                icon: 'mdi:button-cursor',
                                menuVisibleWithForbidden: true,
                                title: 'demos.access.menuVisible403'
                            }
                        },
                        roleWithMenus[role]
                    ]
                }
            ]
        }
    ]
}

export const MOCK_MENUS = [
    {
        menus: [...dashboardMenus, ...createDemosMenus('super')],
        username: 'vben'
    },
    {
        menus: [...dashboardMenus, ...createDemosMenus('admin')],
        username: 'admin'
    },
    {
        menus: [...dashboardMenus, ...createDemosMenus('user')],
        username: 'jack'
    }
]

export const MOCK_MENU_LIST = [
    {
        id: 1,
        name: 'Workspace',
        status: 1,
        type: 'menu',
        icon: 'mdi:dashboard',
        path: '/workspace',
        component: '/dashboard/workspace/index',
        meta: {
            icon: 'carbon:workspace',
            title: 'page.dashboard.workspace',
            affixTab: true,
            order: 0
        }
    },
    {
        id: 2,
        meta: {
            icon: 'carbon:settings',
            order: 9997,
            title: 'system.title',
            badge: 'new',
            badgeType: 'normal',
            badgeVariants: 'primary'
        },
        status: 1,
        type: 'catalog',
        name: 'System',
        path: '/system',
        children: [
            {
                id: 201,
                pid: 2,
                path: '/system/menu',
                name: 'SystemMenu',
                authCode: 'System:Menu:List',
                status: 1,
                type: 'menu',
                meta: {
                    icon: 'carbon:menu',
                    title: 'system.menu.title'
                },
                component: '/system/menu/list',
                children: [
                    {
                        id: 20_101,
                        pid: 201,
                        name: 'SystemMenuCreate',
                        status: 1,
                        type: 'button',
                        authCode: 'System:Menu:Create',
                        meta: { title: 'common.create' }
                    },
                    {
                        id: 20_102,
                        pid: 201,
                        name: 'SystemMenuEdit',
                        status: 1,
                        type: 'button',
                        authCode: 'System:Menu:Edit',
                        meta: { title: 'common.edit' }
                    },
                    {
                        id: 20_103,
                        pid: 201,
                        name: 'SystemMenuDelete',
                        status: 1,
                        type: 'button',
                        authCode: 'System:Menu:Delete',
                        meta: { title: 'common.delete' }
                    }
                ]
            },
            {
                id: 202,
                pid: 2,
                path: '/system/dept',
                name: 'SystemDept',
                status: 1,
                type: 'menu',
                authCode: 'System:Dept:List',
                meta: {
                    icon: 'carbon:container-services',
                    title: 'system.dept.title'
                },
                component: '/system/dept/list',
                children: [
                    {
                        id: 20_401,
                        pid: 201,
                        name: 'SystemDeptCreate',
                        status: 1,
                        type: 'button',
                        authCode: 'System:Dept:Create',
                        meta: { title: 'common.create' }
                    },
                    {
                        id: 20_402,
                        pid: 201,
                        name: 'SystemDeptEdit',
                        status: 1,
                        type: 'button',
                        authCode: 'System:Dept:Edit',
                        meta: { title: 'common.edit' }
                    },
                    {
                        id: 20_403,
                        pid: 201,
                        name: 'SystemDeptDelete',
                        status: 1,
                        type: 'button',
                        authCode: 'System:Dept:Delete',
                        meta: { title: 'common.delete' }
                    }
                ]
            }
        ]
    },
    {
        id: 9,
        meta: {
            badgeType: 'dot',
            order: 9998,
            title: 'demos.vben.title',
            icon: 'carbon:data-center'
        },
        name: 'Project',
        path: '/vben-admin',
        type: 'catalog',
        status: 1,
        children: [
            {
                id: 901,
                pid: 9,
                name: 'VbenDocument',
                path: '/vben-admin/document',
                component: 'IFrameView',
                type: 'embedded',
                status: 1,
                meta: {
                    icon: 'carbon:book',
                    iframeSrc: 'https://doc.vben.pro',
                    title: 'demos.vben.document'
                }
            },
            {
                id: 902,
                pid: 9,
                name: 'VbenGithub',
                path: '/vben-admin/github',
                component: 'IFrameView',
                type: 'link',
                status: 1,
                meta: {
                    icon: 'carbon:logo-github',
                    link: 'https://github.com/vbenjs/vue-vben-admin',
                    title: 'Github'
                }
            },
            {
                id: 903,
                pid: 9,
                name: 'VbenAntdv',
                path: '/vben-admin/antdv',
                component: 'IFrameView',
                type: 'link',
                status: 0,
                meta: {
                    icon: 'carbon:hexagon-vertical-solid',
                    badgeType: 'dot',
                    link: 'https://ant.vben.pro',
                    title: 'demos.vben.antdv'
                }
            }
        ]
    },
    {
        id: 10,
        component: '_core/about/index',
        type: 'menu',
        status: 1,
        meta: {
            icon: 'lucide:copyright',
            order: 9999,
            title: 'demos.vben.about'
        },
        name: 'About',
        path: '/about'
    }
]
